iT邦幫忙

2024 iThome 鐵人賽

DAY 21
0
Python

一起來用 Snakify 練練手系列 第 21

【一起來用 Snakify 練練手】Day21 Lesson 9 練習題參考解答-1

  • 分享至 

  • xImage
  •  

偷偷打廣告
台灣首發晶片設計教材要募資啦
趕快點擊去了解 👉 https://wlinny.com

這單元開始我程式碼有點亂
先附上參考解答😝
要完成思考才能看答案喔

  • Maximum
    😈 找最大值
n, m = [int(i) for i in input().split()]
a = [[int(j) for j in input().split()] for i in range(n)]
best_i, best_j = 0, 0
curr_max = a[0][0]
for i in range(n):
    for j in range(m):
        if a[i][j] > curr_max:
            curr_max = a[i][j]
            best_i, best_j = i, j
print(best_i, best_j)
  • Snowflake
    😈 畫圖
n = int(input())
a = [['.'] * n for i in range(n)]
for i in range(n):
    a[i][i] = '*'
    a[n // 2][i] = '*'
    a[i][n // 2] = '*'
    a[i][n - i - 1] = '*'
for row in a:
    print(' '.join(row))

這段程式的目的是根據給定的一個奇數 n,生成一個大小為 n x n 的二維陣列。該陣列初始時每個元素都是 . 字符,之後在中間行、中間列和兩條對角線上填充 * 字符,這樣形成一個類似雪花的圖案。程式最後會將這個陣列以 n x n 的形式列印出來,且每個字符之間以空格分隔。

  1. n = int(input()):從使用者輸入讀取一個整數 n,此 n 必須是一個奇數,代表陣列的維度。
  2. a = [['.'] * n for i in range(n)]:建立一個大小為 n x n 的二維陣列,所有元素初始為 .
  3. for i in range(n):這個迴圈用於遍歷陣列的每一列和每一行,並填充雪花圖案中的 * 符號:
    • a[i][i] = '*':設定主對角線(左上到右下)上的元素為 *。
    • a[n // 2][i] = '*':設定中間行的所有元素為 *。
    • a[i][n // 2] = '*':設定中間列的所有元素為 *。
    • a[i][n - i - 1] = '*':設定次對角線(右上到左下)上的元素為 *。
  4. for row in a: print(' '.join(row)):逐行列印陣列,每行中的字符以空格分隔。
  • Chess board
    😈 棋盤
n, m = [int(i) for i in input().split()]
a = []
for i in range(n):
    a.append([])
    for j in range(m):
        if (i + j) % 2 == 0:
            a[i].append('.')
        else:
            a[i].append('*')
for row in a:
    print(' '.join(row))

這段程式的目的是根據給定的兩個整數 n 和 m,生成一個大小為 n x m 的二維陣列,並以棋盤格的方式填充 . 和 * 字符,左上角的字符是 .。最後程式會將該陣列以 n x m 的形式列印出來,每個字符以空格分隔。

  1. n, m = [int(i) for i in input().split()]:從使用者輸入讀取兩個整數 nm,分別代表陣列的行數和列數。
  2. a = []:初始化一個空的列表 a,用來存儲二維陣列。
  3. for i in range(n):這個迴圈遍歷每一行,對於每一行執行以下操作:
    • a.append([]):為每一行創建一個新的空列表。
    • for j in range(m):這個內部迴圈遍歷每一列,並決定當前位置應該填充 . 還是 *
      • if (i + j) % 2 == 0:如果 i + j 的和是偶數,則在該位置填充 .
      • else:如果 i + j 的和是奇數,則在該位置填充 *
  4. for row in a: print(' '.join(row)):逐行列印二維陣列,並使用空格將每行中的字符分隔開。
  • The diagonal parallel to the main
    😈 找最大值
n = int(input())
a = [[abs(i - j) for j in range(n)] for i in range(n)]
for row in a:
    print(' '.join([str(i) for i in row]))

這段程式的目的是根據給定的整數 n,生成一個大小為 n x n 的二維陣列。該陣列的規則是:在主對角線上填入 0,在與主對角線相鄰的對角線上填入 1,接下來的對角線依次填入 2、3,以此類推。最後,程式會將該陣列以 n x n 的形式列印出來,每個元素之間以空格分隔。

  • n = int(input()):從使用者輸入讀取一個整數 n,表示二維陣列的大小為 n x n。

  • a = [[abs(i - j) for j in range(n)] for i in range(n)]

    • 這是用列表推導式生成二維陣列的部分。
    • 對於每一個位置(i, j),其值是 ij 之間的絕對差 abs(i - j)。這表示位置離主對角線的距離,例如主對角線上 i == j,所以 abs(i - j) == 0,而離主對角線越遠,值就越大。
  • for row in a: print(' '.join([str(i) for i in row])):這部分遍歷二維陣列的每一行,並將該行的數字元素轉換成字串,然後用空格分隔並列印出來。

今天只來得及寫四題 qq 思考有點久


上一篇
【一起來用 Snakify 練練手】Day20 Lesson 9 概念
系列文
一起來用 Snakify 練練手21
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言